package com.bbva.itradecomex.bo.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bbva.itradecomex.bo.iface.RelacionBancoBO;
import com.bbva.itradecomex.dao.iface.VistaClienteDAO;
import com.bbva.itradecomex.domain.ClienteRelacionBancoResultado;
import com.bbva.itradecomex.form.RelacionBancoBusquedaForm;
import com.bbva.itradecomex.util.Constantes;
import com.bbva.itradecomex.util.ITradexUtil;

@Service
public class RelacionBancoBOImpl implements RelacionBancoBO {

	@Autowired
	private VistaClienteDAO vistaClienteDAO;

	@Override
	public List<ClienteRelacionBancoResultado> getListRankingBancoImport(RelacionBancoBusquedaForm formulario) throws Exception {
		return (vistaClienteDAO.getListCResultadoBancoDetImp(formulario));
	}
	@Override
	public List<ClienteRelacionBancoResultado> getListRankingBancoExport(RelacionBancoBusquedaForm formulario)
			throws Exception {
		return (vistaClienteDAO.getListCResultadoBancoDetExp(formulario));
	}

	@Override
	public List<ClienteRelacionBancoResultado> getListRankingBancoImpExp(RelacionBancoBusquedaForm formulario)
			throws Exception {
		return (vistaClienteDAO.getListCResultadoBancoDetImpExp(formulario));
	}
	
	@Override
	public void setearTotales(
			ClienteRelacionBancoResultado  subTotalBancoConClaveImp,
			ClienteRelacionBancoResultado  subTotalBancoSinClaveImp,
			ClienteRelacionBancoResultado  totalBanco,
			List<ClienteRelacionBancoResultado> listaCBancoResultadoImportaciones)
			throws Exception {
		// Total bANCO
		for (ClienteRelacionBancoResultado cRelacBancoIter : listaCBancoResultadoImportaciones) {
			totalBanco.setTotOper(ITradexUtil.addBigDecimal(totalBanco.getTotOper(),cRelacBancoIter.getTotOper()));
			totalBanco.setTotImporte(ITradexUtil.addBigDecimal(totalBanco.getTotImporte(),cRelacBancoIter.getTotImporte()));
			totalBanco.setTxOper(ITradexUtil.addBigDecimal(totalBanco.getTxOper(),cRelacBancoIter.getTxOper()));
			totalBanco.setTxImporte(ITradexUtil.addBigDecimal(totalBanco.getTxImporte(),cRelacBancoIter.getTxImporte()));
			totalBanco.setLcOper(ITradexUtil.addBigDecimal(totalBanco.getLcOper(),cRelacBancoIter.getLcOper()));
			totalBanco.setLcImporte(ITradexUtil.addBigDecimal(totalBanco.getLcImporte(),cRelacBancoIter.getLcImporte()));
			totalBanco.setClOper(ITradexUtil.addBigDecimal(totalBanco.getClOper(),cRelacBancoIter.getClOper()));
			totalBanco.setClImporte(ITradexUtil.addBigDecimal(totalBanco.getClImporte(),cRelacBancoIter.getClImporte()));
			
			// SE COMPLETAN LOS VALORES DE LOS CAMPOS BCOGRUPO, CONCLAVE Y ALADI
			if(cRelacBancoIter.getBcoGrupo().equals(Constantes.CONSTANTE_SI_VAL))
				cRelacBancoIter.setBcoGrupo(Constantes.CONSTANTE_SI_DESC);
			else if(cRelacBancoIter.getBcoGrupo().equals(Constantes.CONSTANTE_NO_VAL))
				cRelacBancoIter.setBcoGrupo(Constantes.CONSTANTE_NO_DESC);
			
			if(cRelacBancoIter.getConClave().equals(Constantes.CONSTANTE_SI_VAL))
				cRelacBancoIter.setConClave(Constantes.CONSTANTE_SI_DESC);
			else if(cRelacBancoIter.getConClave().equals(Constantes.CONSTANTE_NO_VAL))
				cRelacBancoIter.setConClave(Constantes.CONSTANTE_NO_DESC);
			
			if(cRelacBancoIter.getAladi().equals(Constantes.CONSTANTE_SI_VAL))
				cRelacBancoIter.setAladi(Constantes.CONSTANTE_SI_DESC);
			else if(cRelacBancoIter.getAladi().equals(Constantes.CONSTANTE_NO_VAL))
				cRelacBancoIter.setAladi(Constantes.CONSTANTE_NO_DESC);
		}
	}
	
	@Override
	public void generaPDFRelacionBanco(
			Integer impoExpo,
			FacesContext facesContext,
			List<ClienteRelacionBancoResultado> listaCBancoResultadoImportaciones,
			RelacionBancoBusquedaForm filtros,
			ClienteRelacionBancoResultado totales,String strTipoArchivoExportacion) throws Exception {
		Map<String,Object> parametros = new HashMap<String, Object>();
		String strNombrePDF = "Relacion_Bancos_";
		parametros.put("titulo","RELACION BANCOS");
		if (impoExpo==Constantes.TIPO_IMPORTACION_VAL){
			parametros.put("expoImpo","IMPORTACIONES");
			strNombrePDF+="IMPO_";
		}
		else if(impoExpo==Constantes.TIPO_EXPORTACION_VAL){
			parametros.put("expoImpo","EXPORTACIONES");
			strNombrePDF+="EXPO_";
		}
		else if(impoExpo==Constantes.TIPO_IMPOEXPO_VAL){
			parametros.put("expoImpo","IMPORTACIONES Y EXPORTACIONES");
			strNombrePDF+="IMPOEXPO_";
		}
		parametros.put("filPais",filtros.getStrDescPais());
		parametros.put("filNomBanco",filtros.getStrDescBanco());
		parametros.put("filClave",filtros.getStrExcluClave());
		parametros.put("filGrupo",filtros.getStrExcluGrupo());
		parametros.put("filFechaIni",filtros.getDtFechaIni());
		parametros.put("filFechaFin",filtros.getDtFechaFin());
		if(filtros.getLngTopBanco()!=null && filtros.getLngTopBanco() > 0)
			parametros.put("filTopBanco",filtros.getLngTopBanco());
		parametros.put("filAladi",filtros.getStrExcluOpera());
		parametros.put("cliNombre",filtros.getClienteDatos().getStrNomCliente());
		parametros.put("cliTipoDoc",filtros.getClienteDatos().getStrTipDocumento());
		parametros.put("cliSegmento",filtros.getClienteDatos().getStrDescSegmento());
		parametros.put("cliGestPrinc",filtros.getClienteDatos().getStrDescGestPrincipal());
		parametros.put("cliCodigo",filtros.getClienteDatos().getStrCodCliente());
		parametros.put("cliNroDoc",filtros.getClienteDatos().getStrNumDocumento());
		parametros.put("cliOficPrinc",filtros.getClienteDatos().getStrDescOficPrincipal());
		
		if(totales==null)totales=new ClienteRelacionBancoResultado();
		
		parametros.put("totalOper",totales.getTotOper());
		parametros.put("totalImporte",totales.getTotImporte());
		parametros.put("totalTxOper",totales.getTxOper());
		parametros.put("totalTxImporte",totales.getTxImporte());
		parametros.put("totalLcOper",totales.getLcOper());
		parametros.put("totalLcImporte",totales.getLcImporte());
		parametros.put("totalClOper",totales.getClOper());
		parametros.put("totalClImporte",totales.getClImporte());
		
		strNombrePDF=strNombrePDF+"_"+ITradexUtil.convertUtilDateToString(new Date(), Constantes.FORMAT_DATE_MM_DD_yyyy);

		if (strTipoArchivoExportacion.equals(Constantes.TIPO_ARCHIVO_EXPORTACION_PDF)){
			ITradexUtil.exportPDF(parametros, listaCBancoResultadoImportaciones, "/xmlReport/cliente/relacionBancos/relacionBancos.jasper",strNombrePDF);	
		}else if(strTipoArchivoExportacion.equals(Constantes.TIPO_ARCHIVO_EXPORTACION_XLS)){
			parametros.put("listaCBancoResultadoImportaciones",listaCBancoResultadoImportaciones);
			ITradexUtil.exportXLSJasperEmptyDS(parametros, "/xmlReport/cliente/relacionBancos/relacionBancos_Excel.jasper",strNombrePDF);
		}
	}
}
